<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

  <script>
    // 类方法  resolve  reject  all allSettled race any
    Promise.resolve("123").then(res => {
      console.log(res);
    })

    Promise.reject('我拒绝').catch(err => {
      console.log(err);
    })

    let p1 = new Promise((resolve, reject) => {
      setTimeout(() => {
        // resolve("p1 resolve")
        reject("p1拒绝")

      }, 3000)
    })

    let p2 = new Promise((resolve, reject) => {
      setTimeout(() => {
        // resolve("p2 resolve")
        reject("p2拒绝")

      }, 2000)
    })


    let p3 = new Promise((resolve, reject) => {
      setTimeout(() => {
        // resolve("p3 resolve")
        reject("p5拒绝")
      }, 5000)
    })

    // all方法的话 会发回一个promise对象，所有的promise都成功返回的promise的状态才为成功，返回一个成功结果的数组，
    //只要有一个reject,下边的内容不再执行， 那么返回的promise状态就为rejected，并且会返回第一个reject的结果作为all方法返回的promise对象的reject结果

    // Promise.all([p1, p2, p3]).then(res => {
    //   console.log(res);
    // }).catch(err => {
    //   console.log(err);
    // })

    // allSettled 所有的promise成功与否都会全部执行完，然后返回一个promise对象，它的状态一定是fulfiled,
    // 它的结果就是一个对象数组，每个对象有状态描述status，拒绝原因reason/完成后返回的成功的值value

    // Promise.allSettled([p1, p2, p3]).then(res => {
    //   console.log(res);
    // })


    // race 谁先有结果我就用谁的结果,状态也是先有结果的那个的状态
    // 无论结果是fulfilled还是rejected结果
    // Promise.race([p1, p2, p3]).then(res => {
    //   console.log(res);
    // }).catch(err => {
    //   console.log(err);
    // })

    // any 拿到的是第一个已完成的结果，如果所有结果都是拒绝rejecct,则会返回错误信息"AggregateError: All promises were rejected"
    Promise.any([p1, p2, p3]).then(res => {
      console.log(res);
    }).catch(err => {
      console.log(err);
    })

    // resolve reject all allSettle  race any  





  </script>

</body>

</html>